package com.blumov.fastbox.compra;

import java.util.ArrayList;
import java.util.List;

import com.blumov.fastbox.application.services.compra.PedidoService;
import com.blumov.fastbox.application.services.servicelocator.ServiceLocator;
import com.blumov.fastbox.application.services.servicelocator.ServiceLocatorImpl;
import com.blumov.fastbox.domain.model.compra.Bandeja;
import com.blumov.fastbox.domain.model.compra.ItemPedido;
import com.blumov.fastbox.domain.model.compra.Pedido;
import com.blumov.fastbox.domain.model.compra.PedidoId;
import com.blumov.fastbox.domain.model.compra.PedidoRepository;
import com.blumov.fastbox.domain.model.producto.Producto;

public class TerminalCocinaFacadeImpl implements TerminalCocinaFacade {

	private PedidoService pedidoService;
	private PedidoRepository pedidoRepository;
	

	public TerminalCocinaFacadeImpl() {
		ServiceLocator serviceLocator = new ServiceLocatorImpl();
		this.pedidoService = serviceLocator.getPedidoService();
		this.pedidoRepository = serviceLocator.getPedidoRepository();
	}
	
	/**
	 * @see com.blumov.fastbox.compra.TerminalCocinaFacade#pedidoCocinado(java.lang.String)
	 */
	public void pedidoCocinado(String nroPedido) {
		pedidoService.cocinar(new PedidoId(nroPedido));
	}

	/**
	 * @see com.blumov.fastbox.compra.TerminalCocinaFacade#traerPedidoACocinar()
	 */
	public PedidoDTO traerPedidoACocinar() {
		List<Pedido> lista = pedidoRepository.pedidosParaCocinar();
		if (lista == null || lista.size() == 0) {
			return new PedidoDTO();
		}
		
		Pedido pedido = lista.get(0);
		lista.get(0).getBandejas();

		return this.toPedidoDTO(pedido);
	}
	
	private PedidoDTO toPedidoDTO(Pedido pedido) {
		
		PedidoDTO pedidoDTO = new PedidoDTO();
		pedidoDTO.setNumero(pedido.pedidoId().idString());
		
		List<BandejaDTO> bandejasDTO = new ArrayList<BandejaDTO>();
		
		for (Bandeja bandeja : pedido.getBandejas()) {
			
			BandejaDTO bandejaDTO = new BandejaDTO();
			
			for (ItemPedido item : bandeja.getItems()) {
				Producto producto = item.getProducto();
				if ("COCINA".equals(producto.getTipo())) {
					ItemPedidoDTO itemDTO = new ItemPedidoDTO(producto.getCodigo());
					bandejaDTO.addItem(itemDTO);
				}
			}
			
			if (bandejaDTO.getItems().size() > 0) {
				bandejasDTO.add(bandejaDTO);
			}
			
		}
		
		pedidoDTO.setBandejas(bandejasDTO);
		return pedidoDTO;
	}
}
